//
//  MainViewController.swift
//  XNWeiBo_Swift
//
//  Created by xunan on 16/6/18.
//  Copyright © 2016年 xunan. All rights reserved.
//

import UIKit

/*
 command + j -> 定位到目录结构
 上下方向键 选择文件夹
 回车 -> command + c 拷贝文件名称
 command + n 创建文件
 */

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置当前控制器对应的tabbar的颜色
        // 在iOS7以前 如果设置了tintColor 只有文字变
        tabBar.tintColor = UIColor.orangeColor()
        
        // 添加子控制器
        addChildViewControllers()
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
        // 添加 + 按钮
        setupComposeBtn()
        
        
    }
    
    /**
     监听加号按钮点击
     注意: 监听按钮点击的方法不能是私有方法
     按钮点击事件的调用是由 运行循环 监听并且以消息机制传递的, 因此, 按钮监听函数不能设置为 private
     */
    func composeBtnClick() {
        let composeVC = ComposeViewController()
        let nav = UINavigationController(rootViewController: composeVC)
        presentViewController(nav, animated: true, completion: nil)
    }
    
    private func setupComposeBtn() {
        // 添加 + 按钮
        tabBar.addSubview(composeBtn)
        
        // 调整位置
        let width = UIScreen.mainScreen().bounds.size.width / CGFloat(viewControllers!.count)
        let rect = CGRect(x: 0 ,y: 0,width:width, height: 49)
        // 第一个参数:是frame的大小
        // 第二个参数:是x方向的偏移大小
        // 第一个参数:是y方向的偏移大小

        composeBtn.frame = CGRectOffset(rect, 2 * width, 0)
    }

    
    /**
     添加所有子控制器
     */
    private func addChildViewControllers() {
        // 1.获取json文件路径
        let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
        // 2.通过文件路径创建NSData
        if let jsonPath = path{
            let jsonData = NSData(contentsOfFile: jsonPath)
            
            do {
                // 有可能发生异常到这里
                // 3.序列化json-.Array
                // try :发生异常就到catch中
                // try! :发生异常崩溃
                let dictArr = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)
                // 在Swift中,如果要遍历数组,必须明确数据的类型
                for dict in dictArr as! [[String: String]]
                {
                    addChildViewController(dict["vcName"]!, title: dict["title"]!, imageNmaed: dict["imageName"]!)
                }
            }catch {
                print(error)
                // 从本地创建控制器
                addChildViewController("HomeTableViewController", title: "首页", imageNmaed: "tabbar_home")
                addChildViewController("MessageTableViewController", title: "消息", imageNmaed: "tabbar_message_center")
                
                addChildViewController("NullViewController", title: "", imageNmaed: "")
                
                addChildViewController("DiscoverTableViewController", title: "发现", imageNmaed: "tabbar_discover")
                addChildViewController("ProfileTableViewController", title: "我", imageNmaed: "tabbar_profile")
                
            }
            
        }

    }
    
    
    /**
     初始化子控制器
     
     - parameter childViewController: 需要初始化的自控制器
     - parameter title:               自控制器的标题
     - parameter imageNmaed:          子控制器的图标名称
     */
    private func addChildViewController(childViewControllerName: String, title: String, imageNmaed: String) {
        
        // 动态获取命名空间
        let namespace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String

        // 字符串转为类
        let cls:AnyClass? = NSClassFromString(namespace + "." + childViewControllerName)
        
        // 将AnyClass转换为指定类型
        let vcCls = cls as! UIViewController.Type
        // 初始化
        let vc = vcCls.init()
        
        // 1.1设置首页tabbar对应的数据
        vc.tabBarItem.image = UIImage(named: imageNmaed)
        vc.tabBarItem.selectedImage = UIImage(named: imageNmaed + "_selected")
        vc.title = title;
        
        // 2.给首页包装一个导航控制器
        let nav = UINavigationController()
        nav.addChildViewController(vc)
        
        // 3.将导航控制器添加到当前控制器上
        addChildViewController(nav)

    }
    
    // MARK: - 懒加载控件
    private lazy var composeBtn: UIButton = {
        let btn = UIButton()
        btn.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: UIControlState.Normal)
        btn.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
        btn.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: UIControlState.Normal)
        btn.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)
        btn.addTarget(self, action: #selector(self.composeBtnClick), forControlEvents: UIControlEvents.TouchUpInside)
        
        return btn
    }()
    
}


































